From 661f08bb3cf7dc3be542527851db75491fef6446 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 20 Nov 2007 15:34:25 +0000 Subject: [PATCH] x86, 32-on-64: Improve checking in vcpu_destroy_pagetables(). It *is* possible for 64-bit guest to have matching guest_table and guest_table_user. Original patch by John Levon Signed-off-by: Keir Fraser --- xen/arch/x86/domain.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index aaf7c979c6..6b4fded0dc 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -1756,10 +1756,6 @@ static void vcpu_destroy_pagetables(struct vcpu *v) put_page(mfn_to_page(pfn)); else put_page_and_type(mfn_to_page(pfn)); -#ifdef __x86_64__ - if ( pfn == pagetable_get_pfn(v->arch.guest_table_user) ) - v->arch.guest_table_user = pagetable_null(); -#endif v->arch.guest_table = pagetable_null(); } @@ -1768,10 +1764,13 @@ static void vcpu_destroy_pagetables(struct vcpu *v) pfn = pagetable_get_pfn(v->arch.guest_table_user); if ( pfn != 0 ) { - if ( paging_mode_refcounts(d) ) - put_page(mfn_to_page(pfn)); - else - put_page_and_type(mfn_to_page(pfn)); + if ( !is_pv_32bit_vcpu(v) ) + { + if ( paging_mode_refcounts(d) ) + put_page(mfn_to_page(pfn)); + else + put_page_and_type(mfn_to_page(pfn)); + } v->arch.guest_table_user = pagetable_null(); } #endif -- 2.30.2